#include <iostream>
#include <cstdlib>
#include <signal.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>

//验证子进程退出会向父进程发送SIGCHLD
//基于信号实现对子进程的回收
void handle(int signo)
{
    std::cout<<"接收到子进程的SIGCHLD退出信号"<<signo<<",验证成功"<<std::endl;
    int status=0;
    int n=waitpid(-1,&status,0);
    if(n>0)
    {
        std::cout<<"子进程等待成功,已经回收"<<std::endl;
    }
}
int main()
{
    ::signal(SIGCHLD,handle);
    pid_t id=fork();
    if(id==0)
    {
        std::cout<<"我是子进程,Pid:"<<getpid()<<std::endl;
        sleep(5);
        exit(0);
    }
    else if(id>0)
    {
        std::cout<<"我是父进程,Pid:"<<getpid()<<std::endl;
        sleep(10);
    }
    return 0;
}